草庐IT

SVN 生命周期

全部标签

现实中的数字生命派,已经在搞“AI复活”了

前言《黑镜》第二季中的一集,女主利用意外身亡的男友在社交网络上留下的大量数据,重塑了一个模拟男友人格的AI。而在现实中,像这样“通过另一种形式与虚拟化的逝者相见”的故事,正在新年伊始之际逐渐走入大众的视野。2023年12月中旬,一则“失独父亲用AI复活病逝儿子”的新闻在海内外引起了广泛关注,故事里的这位中国父亲因ChatGPT、文心一言的技术工具的出现而看到希望,在辗转了多个团队后,最终收到了一段AI生成的儿子的视频。“效果是初级的,但从手机里再次听到儿子的声音,已足以让他的妻子在已故儿子的墓前哭泣。”一家外媒在报道里这样说。这是一类依赖生成式AI的底层技术,复现逝者的形象、声音、言谈举止,甚

c++ - 临时工的生命周期

下面的代码工作正常,但为什么是正确的代码?为什么foo()返回的临时对象的“c_str()”指针有效?我想,当输入bar()时,这个临时文件已经被销毁了——但它似乎不是这样的。所以,现在我假设foo()返回的临时对象将在调用bar()之后被销毁——这是正确的吗?为什么?std::stringfoo(){std::stringout=something...;returnout;}voidbar(constchar*ccp){//dosomethingwiththestring..}bar(foo().c_str()); 最佳答案 当

c++ - 从 C 扩展跟踪 CPython 对象的生命周期

我有一些C++代码可以将事件传递给Python对象。观察者保留为weak_ptr,因此他们不必注销。这在C++中有效,但桥接弱指针和Python弱引用很麻烦(我还希望Python事件处理程序不通过订阅保持事件状态,就像在C++代码中一样)。为了拥有一个实时观察者,当对象处于事件状态时,某些东西需要有一个指向它的共享指针,因此归结为让Python中的观察者控制C++观察者对象的生命周期。到目前为止,我提出的方法涉及大量样板和中间对象(例如,为保留C++观察者和对Python观察者的弱引用的类型创建另一个PyTypeObject,并将其设置为Python观察者,所以它随之消亡)。问题是,有

c++ - C++ 中正确的对象生命周期管理

我有几个保存数据的简单C++类。它们是分层的,每个都包含一个指向child的指针列表(因为我在内存中有很多,所以我不想复制它们)。我只在最高级别工作(将它传递给函数)并且希望每个级别的析构函数都销毁它的子级,所以我要做的就是释放所有它们就是在最顶层的父级上调用delete.当在堆栈上创建某些类时,这会导致出现问题,但这实际上只是问题的一个症状。如我所见,我需要在同一级别上创建和销毁对象,从而知道我是否应该调用delete。但是,这将迫使我保存所有子项的指针并在我的代码中每次使用后销毁它们,这是一种比在最顶层父项上调用delete更脏的解决方案。所以,我的选择是:永远不要在堆栈上定义它们

C++:临时参数的生命周期?

当创建MyClass的新实例作为函数的参数时,如下所示:classMyClass{MyClass(inta);};myFunction(MyClass(42));标准是否对析构函数的时间做出任何保证?具体来说,我可以假设它会在调用myFunction()之后的下一条语句之前被调用吗? 最佳答案 临时对象在它们所属的完整表达式结束时被销毁。完整表达式是不是其他表达式的子表达式的表达式。通常这意味着它在;(或)处结束,用于if、while、switch等)表示语句结束。在您的示例中,它是函数调用的结尾。请注意,您可以通过将临时对象绑定(

c++ - 使函数内联会影响绑定(bind)到其参数的临时对象的生命周期吗?

这个问题与DoesthisC++staticanalysisrulemakesenseasis?有关,但有些不同。我现在已经实现了一个静态分析规则来查找函数返回其常量引用参数作为引用的情况,例如constX&f(constX&x){returnx;}当临时对象绑定(bind)到x时,这可能很狡猾,因为临时对象的生命周期将在f的返回值可以绑定(bind)到调用者,召集者。换句话说,这是有问题的:constX&r=f(X());在运行规则时,我在标准库中找到了min的实现,如下所示:templateinlineconst_Tp&min(const_Tp&__a,const_Tp&__b){

c++ - boost python 对象的生命周期

cpp:#includeusingnamespaceboost;usingnamespaceboost::python;structFoo{virtual~Foo(){}virtualvoidPrint()=0;};structFooWrap:Foo,wrapper{voidPrint(){this->get_override("Print")();}};voidProcessFoo(Foo*obj){obj->Print();}BOOST_PYTHON_MODULE(hello_ext){class_("Foo").def("Print",pure_virtual(&Foo::Pri

c++ - 通过 const 引用延长临时生命周期

C++我正在尝试了解const引用如何延长临时对象的生命周期。我正在运行oneoftheanswerstoWhatarethedifferencesbetweenpointervariableandreferencevariableinC++?中的代码片段并在VC11和g++4.8之间得到了冲突的结果。我在这里扩展了代码段:#includestructscope_test{~scope_test(){printf("scope_testdone!\n");}};intmain(){constscope_test&test=scope_test();printf("inscope\n")

c++ - 短路临时生命周期

假设我们有一个短路的bool表达式,例如,f(g()&&std::string().size()==0);我正在考虑临时std::string的生命周期。通常,编译器会在完整表达式的末尾破坏临时变量。但在这种情况下,这是不合适的,因为它不知道g()是否返回true。所以我想知道编译器通常如何处理这种情况。他们是否存储了一个变量来告诉他们是否发出析构函数调用?或者标准是否允许他们提前销毁临时文件? 最佳答案 &&短路,所以std::string().size()只会在g()返回真值。IOW,如果g()没有返回true,则无需担心销毁临

泛型、Trait 和生命周期(上)

目录1、提取函数来减少重复2、在函数定义中使用泛型3、结构体定义中的泛型 4、枚举定义中的泛型5、方法定义中的泛型6、泛型代码的性能每一门编程语言都有高效处理重复概念的工具。在Rust中其工具之一就是 泛型(generics)。泛型是具体类型或其他属性的抽象替代。我们可以表达泛型的属性,比如它们的行为或如何与其他泛型相关联,而不需要在编写和编译代码时知道它们在这里实际上代表什么。首先,我们将回顾一下提取函数以减少代码重复的机制。接下来,我们将使用相同的技术,从两个仅参数类型不同的函数中创建一个泛型函数。我们也会讲到结构体和枚举定义中的泛型。之后,我们讨论 trait,这是一个定义泛型行为的方法